package com.jt.controller;

import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Arrays;

@Controller //将类交给SpringMVC管理,SpringMVC交给Spring容器管理
@ResponseBody   //将数据转化为"特殊字符串"返回
@CrossOrigin    //允许跨域
public class UserController {
    /**
     * URL地址: http://localhost:8080/hello  get请求
     *         http://localhost:8080/dog    get请求
     *         http://localhost:8080/cat    get请求
     * 参数:  无
     * 返回值:  "你好,SpringMVC"的字符串
     */
    @RequestMapping("/hello")
    public String hello(){

        return "你好,SpringMVC";
    }

    /**
     * 需求: 接收参数 name=xxx age=xxx
     * URL: http://localhost:8080/findUserByNA?name=tomcat&age=18
     * 返回值: "数据正确:name:age"
     * 知识点:
     *      1.通过url中的key获取数据.
     */
    @RequestMapping("/findUserByNA")
    public String findUserByNA(String name,int age){

        return "数据正确:"+name+":"+age;
    }

    /**
     * 需求: 接收参数 name=xxx age=xxx
     * URL: http://localhost:8080/findUserByNA2?name=tomcat&age=18
     * 返回值: user.toString 字符串
     * 知识点:
     *      1.通过url中的key获取数据.
     *      2.如果参数众多,则可以使用对象的方式接收,要求必须有set方法
     */
    @RequestMapping("/findUserByNA2")
    public String findUserByNA2(User user){

        return user.toString();
    }

    /**
     * URL:http://localhost:8080/hobby?hobby=敲代码,睡觉,打游戏,熬夜
     * 参数: hobby=敲代码,睡觉,打游戏,熬夜
     * 返回值: 获取的参数返回即可
     * 知识点: 如果遇到同名提交问题.则SpringMVC可以采用数组接收.内部自动完成分割
     * 底层实现: hobby.split(",");
     */
    @RequestMapping("/hobby")
    public String hobby(String[] hobby){
       /* String[] array = hobby.split(",");
        System.out.println(array[0]);*/
        //数组转化为字符串
        return Arrays.toString(hobby);
    }

    /**
     * URL地址:
     *  http://localhost:8080/findUser/tomcat/18/男  get类型
     * 参数: name/age/sex
     * 返回值: 返回值获取的数据
     * restFul语法:
     *     1. 参数与参数之间使用/分割
     *     2. 需要接收的参数使用{}包裹
     *     3. 参数接收时采用@PathVariable取值
     * 简化写法: 如果{name}的属性与对象的属性名称一致 则可以使用对象接收
     *         调用对象的set方法 为属性赋值.
     */
    @RequestMapping("/findUser/{name}/{age}/{sex}")
    public String findUser(User user){

        return user.toString();
    }



    /*@RequestMapping("/findUser/{name}/{age}/{sex}")
    public String findUser(@PathVariable String name,
                           @PathVariable int age,
                           @PathVariable String sex){

        return name+":"+age+":"+sex;
    }*/

    /**
     * URL: http://localhost:8080/findJSON?name=tomcat&age=18  get
     * 参数: name=tomcat&age=18
     * 返回值:  User对象的JSON
     * 知识点:
     *      1.@ResponseBody //将返回值转化为JSON串  使用最多!!!
     *      2.如果返回String类型,则@ResponseBody将字符串本身返回给前端.
     */
    @RequestMapping("/findJSON")
    @ResponseBody //将返回值转化为JSON串
    public User findJSON(User user){
        //在业务层扩展数据
        user.setId(101);
        user.setSex("男");
        return user;
    }










}
